package controlador;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import bean.Conexion;
import modelo.ConexionDao;
import modelo.Estudiante;
import modelo.Planteamiento;
import modelo.TipoPlanteamiento;
import modelo.Usuario;

public class DAO extends ConexionDao  {
	
	public DAO() {
		super();

	}

	//metodos para manejo de usuarios
	public void registrarestudiante(Usuario usuario) {

		String tiraSQL = "INSERT INTO usuario (uscedula,usnombre,usapellido,usuario,password) VALUES ('"
				+ usuario.getCedula()
				+ "', '"
				+ usuario.getNombre()
				+ "','"
				+ usuario.getApellido()
				+ "','"
				+ usuario.getUsuario()
				+ "','"
				+ usuario.getPassword() + "')";

		Conexion.ejecutar(tiraSQL);
	}

	public List<Usuario> consultarUsuario() {
		List<Usuario> usuarios = new ArrayList<Usuario>();
		String tiraSQL = "SELECT * FROM usuario";
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				String cedula = resultSet.getString("uscedula");
				String nombre = resultSet.getString("usnombre");
				String apellido = resultSet.getString("usapellido");
				String usuariot = resultSet.getString("usuario");
				String password = resultSet.getString("password");
				Usuario usuario = new Usuario(cedula, nombre, apellido,
						usuariot, password);
				usuarios.add(usuario);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return usuarios;
	}

	public boolean comprobarCedulaUsuario(String cedulaa) throws SQLException {

		boolean existe = true;
		String tiraSQL = "SELECT * FROM usuario WHERE uscedula='" + cedulaa
				+ "'";
		List<Usuario> usuarios = new ArrayList<Usuario>();

		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				String cedula = resultSet.getString("uscedula");
				String nombre = resultSet.getString("usnombre");
				String apellido = resultSet.getString("usapellido");
				String usuariot = resultSet.getString("usuario");
				String password = resultSet.getString("password");
				Usuario usuario = new Usuario(cedula, nombre, apellido,
						usuariot, password);
				usuarios.add(usuario);

			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		if (usuarios.isEmpty()) {
			existe = false;
		}

		return existe;

	}

	public boolean comprobarLog(String log, String pass) {

		boolean existe = true;
		String tiraSQL = "SELECT * FROM usuario WHERE usuario='" + log
				+ "' AND password='" + pass + "' ";
		List<Usuario> usuarios = new ArrayList<Usuario>();
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				String cedula = resultSet.getString("uscedula");
				String nombre = resultSet.getString("usnombre");
				String apellido = resultSet.getString("usapellido");
				String usuariot = resultSet.getString("usuario");
				String password = resultSet.getString("password");
				Usuario usuario = new Usuario(cedula, nombre, apellido,
						usuariot, password);
				usuarios.add(usuario);

			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		if (usuarios.isEmpty()) {
			existe = false;
		}

		return existe;

	}
	//metodos para registrar tipo de planteamiento
	
	public void registrarTipoPlanteamiento(TipoPlanteamiento tipoplanteamiento) {
		String tiraSQL = "INSERT INTO tipoplant " + "(codtipoplan, nombplan) "
				+ "VALUES (" + "'" + tipoplanteamiento.getCodigoTipo() + "', '"
				+ tipoplanteamiento.getNombreTipo() + "')";
		Conexion.ejecutar(tiraSQL);
	}

	public List<TipoPlanteamiento> consultarTipoPlanteamiento() {
		List<TipoPlanteamiento> tipoplanteamiento = new ArrayList<TipoPlanteamiento>();
		String tiraSQL = "SELECT * FROM tipoplant";
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {
				int codigo = resultSet.getInt("codtipoplan");
				String nombreTipo = resultSet.getString("nombplan");
				TipoPlanteamiento tipoplanteamiento1 = new TipoPlanteamiento(
						codigo, nombreTipo);
				tipoplanteamiento.add(tipoplanteamiento1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return tipoplanteamiento;
	}

	public List<String> traerNombreTipos() {
		List<String> nombreTipo = new ArrayList<String>();
		String tiraSQL = "SELECT nombPlan FROM tipoplant ORDER BY codtipoplan ASC";
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				String nombre = resultSet.getString("nombPlan");
				nombreTipo.add(nombre);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return nombreTipo;
	}

	public int UltimoIDtipoPlan() {
		List<TipoPlanteamiento> tipoplanteamiento = new ArrayList<TipoPlanteamiento>();
		String tiraSQL = "SELECT * FROM tipoplant ORDER BY codtipoplan DESC";
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				int codigo = resultSet.getInt("codtipoplan");
				String nombreTipo = resultSet.getString("nombplan");
				TipoPlanteamiento tipoplanteamiento1 = new TipoPlanteamiento(
						codigo, nombreTipo);
				tipoplanteamiento.add(tipoplanteamiento1);

			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return tipoplanteamiento.size() + 1;
	}

	public String traerDatosNombre(int codtipoplan) throws SQLException {
		String tiraSQL = "SELECT nombPlan FROM tipoplant WHERE codtipoplan="
				+ codtipoplan + "";
		String nombreTipo = "";
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				nombreTipo = resultSet.getString("nombplan");

			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return nombreTipo;

	}
	
	
	//planteamiento
	public void registrarplanteamiento(Planteamiento planteamiento) {

		String tiraSQL = "INSERT INTO planteamiento (cedula, descripcion,fecha,codtipoplan,id,resuelto) VALUES ('"
				+ planteamiento.getCedula()
				+ "', '"
				+ planteamiento.getDescripcion()
				+ "','"
				+ planteamiento.getFecha()
				+ "',"
				+ planteamiento.getCodigoTipo()
				+ ","
				+ planteamiento.getCodigo()
				+ ","
				+ planteamiento.getResuelto()
				+ ");";

		Conexion.ejecutar(tiraSQL);
	}

	public List<Planteamiento> consultarPlanteamiento(int codigoTipos) {
		List<Planteamiento> Planteamientos = new ArrayList<Planteamiento>();
		String tiraSQL1 = "SELECT * FROM planteamiento WHERE codtipoplan= "
				+ codigoTipos + "";

		String tiraSQL = "SELECT * FROM planteamiento ";

		if (codigoTipos > 0)
			tiraSQL = tiraSQL1;

		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				String cedula = resultSet.getString("cedula");
				String descripcion = resultSet.getString("descripcion");
				Date fecha = resultSet.getDate("fecha");
				int codigoTipo = resultSet.getInt("codTipoPlan");
				boolean resuelto = resultSet.getBoolean("resuelto");
				int codigo = resultSet.getInt("id");

				Planteamiento planteamiento = new Planteamiento(codigo,
						descripcion, fecha, codigoTipo, cedula, resuelto);
				Planteamientos.add(planteamiento);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return Planteamientos;
	}

	public List<Planteamiento> consultarPlanteamientoTerminados() {
		List<Planteamiento> Planteamientos = new ArrayList<Planteamiento>();
		String tiraSQL = "SELECT * FROM planteamiento WHERE resuelto=true";
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				String cedula = resultSet.getString("cedula");
				String descripcion = resultSet.getString("descripcion");
				Date fecha = resultSet.getDate("fecha");
				int codigoTipo = resultSet.getInt("codtipoplan");
				boolean resuelto = resultSet.getBoolean("resuelto");
				int codigo = resultSet.getInt("id");

				Planteamiento planteamiento = new Planteamiento(codigo,
						descripcion, fecha, codigoTipo, cedula, resuelto);
				Planteamientos.add(planteamiento);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return Planteamientos;
	}

	public List<Planteamiento> consultarPlanteamientoTerminados(String date) {
		List<Planteamiento> Planteamientos = new ArrayList<Planteamiento>();
		String tiraSQL = "SELECT * FROM planteamiento WHERE resuelto=true and fecha='" + date + "'";
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				String cedula = resultSet.getString("cedula");
				String descripcion = resultSet.getString("descripcion");
				Date fecha = resultSet.getDate("fecha");
				int codigoTipo = resultSet.getInt("codtipoplan");
				boolean resuelto = resultSet.getBoolean("resuelto");
				int codigo = resultSet.getInt("id");

				Planteamiento planteamiento = new Planteamiento(codigo,
						descripcion, fecha, codigoTipo, cedula, resuelto);
				Planteamientos.add(planteamiento);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return Planteamientos;
	}

	
	public int UltimoIDplant() {
		List<Planteamiento> Planteamientos = new ArrayList<Planteamiento>();

		String tiraSQL = "SELECT * FROM planteamiento ORDER BY id DESC";

		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				String cedula = resultSet.getString("cedula");
				String descripcion = resultSet.getString("descripcion");
				Date fecha = resultSet.getDate("fecha");
				int codigoTipo = resultSet.getInt("codTipoPlan");
				boolean resuelto = resultSet.getBoolean("resuelto");
				int codigo = resultSet.getInt("id");

				Planteamiento planteamiento = new Planteamiento(codigo,
						descripcion, fecha, codigoTipo, cedula, resuelto);
				Planteamientos.add(planteamiento);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return Planteamientos.size() + 1;
	}

	public Date Fecha() {

		String tiraSQL = "SELECT CURRENT_DATE";
		Date fecha = null;
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {

			while (resultSet.next()) {

				fecha = resultSet.getDate(1);

			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return fecha;
	}

	public void Resolver(int id, boolean resp) {
		String tiraSQL = "UPDATE planteamiento SET resuelto='" + resp
				+ "' WHERE id= " + id + "";
		Conexion.ejecutar(tiraSQL);
	}

	public Planteamiento consultarPlanteamientoID(int id) {
		String tiraSQL = "SELECT * FROM planteamiento WHERE id= " + id + "";
		Planteamiento planteamiento = null;

		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				String cedula = resultSet.getString("cedula");
				String descripcion = resultSet.getString("descripcion");
				Date fecha = resultSet.getDate("fecha");
				int codigoTipo = resultSet.getInt("codTipoPlan");
				boolean resuelto = resultSet.getBoolean("resuelto");
				int codigo = resultSet.getInt("id");

				planteamiento = new Planteamiento(codigo, descripcion, fecha,
						codigoTipo, cedula, resuelto);

			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return planteamiento;
	}
	//estudiante
	public void registrarestudiante(Estudiante estudiante) {

		String tiraSQL = "INSERT INTO estudiante (cedula, nombre,apellido,carrera,semestre) VALUES ('"
				+ estudiante.getCedula()
				+ "', '"
				+ estudiante.getNombre()
				+ "','"
				+ estudiante.getApellido()
				+ "','"
				+ estudiante.getCarrera()
				+ "',"
				+ estudiante.getSemestre()
				+ ");";

		Conexion.ejecutar(tiraSQL);
	}

	public boolean comprobarCedulaEstudiante(String cedulaa) throws SQLException {

		boolean existe = true;
		String tiraSQL = "SELECT * FROM estudiante WHERE cedula='" + cedulaa
				+ "'";
		List<Estudiante> estudiantes = new ArrayList<Estudiante>();

		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				String cedula = resultSet.getString("cedula");
				String nombre = resultSet.getString("nombre");
				String apellido = resultSet.getString("apellido");
				String carrera = resultSet.getString("carrera");
				int semestre = resultSet.getInt("semestre");
				Estudiante estudiante = new Estudiante(cedula, nombre,
						apellido, carrera, semestre);
				estudiantes.add(estudiante);

			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		if (estudiantes.isEmpty()) {
			existe = false;
		}

		return existe;

	}

	public List<Estudiante> consultarEstudiantes() {
		List<Estudiante> estudiantes = new ArrayList<Estudiante>();
		String tiraSQL = "SELECT * FROM estudiante";
		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				String cedula = resultSet.getString("cedula");
				String nombre = resultSet.getString("nombre");
				String apellido = resultSet.getString("apellido");
				String carrera = resultSet.getString("carrera");
				int semestre = resultSet.getInt("semestre");
				Estudiante estudiante = new Estudiante(cedula, nombre,
						apellido, carrera, semestre);
				estudiantes.add(estudiante);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return estudiantes;
	}

	public Estudiante traerDatos(String cedulaa) throws SQLException {
		Estudiante estudiante = null;
		String tiraSQL = "SELECT * FROM estudiante WHERE cedula='" + cedulaa
				+ "'";
		List<Estudiante> estudiantes = new ArrayList<Estudiante>();

		ResultSet resultSet = Conexion.consultar(tiraSQL);
		try {
			while (resultSet.next()) {

				String cedula = resultSet.getString("cedula");
				String nombre = resultSet.getString("nombre");
				String apellido = resultSet.getString("apellido");
				String carrera = resultSet.getString("carrera");
				int semestre = resultSet.getInt("semestre");
				estudiante = new Estudiante(cedula, nombre, apellido, carrera,
						semestre);
				estudiantes.add(estudiante);

			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return estudiante;

	}

}
